<?php
namespace Crud\Edit;

use Users\Profile;
use Pinenut\Form;
use Profiles\Trips\Trip;


abstract class FormAction extends \Forms\FormAction {
	protected static $isPublic = true;
	
	protected static $_crudConfigClass = 'CrudConfig';
	protected static $layout = "#layouts.modal";

	// тут мы говорим какую вызывать вьюху.
	protected static $defaultViews = ['#crud.edit.form'];

	protected $model;

	protected $entityId;

	protected function onBeginRun()
	{
		parent::onBeginRun();

		$langId = $this->request->_langId;

		// FIXME: это какой-то ёбаный стыд - перестаёт работать позднее статическое связывание
		/// после того как я файнд делаюю ниже, поэтому загрузку конфы выношу сюда
		$class = static::$_crudConfigClass;
		$modelName = $class::get('model');
		$formConfig = $class::getEditForm();

		$this->entityId = $this->request->id;
		$finder = $modelName::find();
		$this->model = $finder->withLang($langId)
			->where('_id', $this->entityId)
			->one();

		if (!$this->model) {
			throw new \Exception($formConfig['entityName'] . ' not found');
		}
	}

	protected function getFormId()
	{
		return $this->request->action . $this->entityId;
	}

	protected function getFormConfig()
	{
		$class = static::$_crudConfigClass;
		$formConfig = $class::getEditForm();

		return $formConfig;
	}

	protected function getFormAction() {
		return $this->url($this->request->action, ['id' => $this->entityId]);
	}

	protected function onFormProcess()
	{
		// уже проверили что всё ок
		$data = $this->form->getValues();

		$this->model->populate($data, false);
		$this->model->save();

		$this->form->flush();
		$this->response->noRender(true);
	}

	protected function onGetRequest()
	{
		$this->form->setValues($this->model->toArray());
	}

	protected function onEndRun()
	{
		$class = static::$_crudConfigClass;

		$this->response->form = $this->form;
		$this->response->name = $class::get('entityName');
	}

	/*protected function run()
	{
		// отрубаем кеширование если пост-запрос
		if ($this->request->_isPost) {
			$this->response->noCache(true);
		}

		// FIXME: это какой-то ёбаный стыд - перестаёт работать позднее статическое связывание
		/// после того как я файнд делаюю ниже, поэтому загрузку конфы выношу сюда
		$class = static::$_crudConfigClass;
		$formConfig = $class::getEditForm();
		$modelName = $class::get('model');
		
		
		$id = $this->request->id;
		$model = $modelName::find($id);
		
		if (!$model) {
			throw new \Exception($formConfig['entityName'] . ' not found');
		}
		
		
		$formConfig['htmlOptions']['action'] = $this->url($this->request->action, ['id' => $id]);

		$form = new Form ( $this->request->_identity, $this->request->action . $id, $formConfig);
		if ($this->request->_isPost && $this->request->isPartial) {
			$form->process($this->request->params(), true);
			$this->response->content =  $form->render();
			$this->response->noRender(true);
			return;

		} else if ($this->request->_isPost) {
			if (!$form->process($this->request->params())) {
				$this->response->form = $form;
				return;
			}
			// уже проверили что всё ок
			$data = $form->getValues();
				
			$model->populate($data, false);
			$model->save();
				
			$form->flush();
			$this->response->noRender(true);
		} else {
			$form->setValues($model->toArray());
		}

		$this->response->form = $form;
		$this->response->name = $class::get('entityName');
	}*/
}